const express = require('express');
const router = express.Router();
const db = require('../db');
const { authenticateToken, checkRole, getCurrentUser } = require('../middleware/authMiddleware');
const bcrypt = require('bcryptjs');

// 获取所有用户 (仅管理员)
router.get('/', authenticateToken, checkRole('admin'), (req, res) => {
  const sql = `SELECT u.id, u.username, u.full_name, u.email, r.name as role, u.created_at
               FROM users u
               JOIN roles r ON u.role_id = r.id
               ORDER BY u.created_at DESC`;

  db.all(sql, [], (err, users) => {
    if (err) {
      return res.status(500).json({ message: '获取用户列表失败', error: err.message });
    }
    res.json(users);
  });
});

// 获取员工列表 (供清算经理选择通知接收者)
router.get('/employees', authenticateToken, checkRole('admin', 'payment_manager'), (req, res) => {
  const sql = `SELECT id, username, full_name
               FROM users
               WHERE role_id = (SELECT id FROM roles WHERE name = 'employee')
               ORDER BY full_name`;

  db.all(sql, [], (err, employees) => {
    if (err) {
      return res.status(500).json({ message: '获取员工列表失败', error: err.message });
    }
    res.json(employees);
  });
});

// 获取单个用户
router.get('/:id', authenticateToken, (req, res) => {
  const { id } = req.params;

  // 管理员可以查看任何用户，普通用户只能查看自己
  const sql = `SELECT u.id, u.username, u.full_name, u.email, r.name as role, u.created_at
               FROM users u
               JOIN roles r ON u.role_id = r.id
               WHERE u.id = ?`;

  db.get(sql, [id], (err, user) => {
    if (err) {
      return res.status(500).json({ message: '获取用户信息失败', error: err.message });
    }

    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }

    // 检查权限：管理员或用户本人
    if (req.user.role !== 'admin' && req.user.id !== user.id) {
      return res.status(403).json({ message: '没有访问权限' });
    }

    res.json(user);
  });
});

// 更新用户角色 (仅管理员)
router.patch('/:id/role', authenticateToken, checkRole('admin'), (req, res) => {
  const { id } = req.params;
  const { role } = req.body;

  if (!role || !['admin', 'payment_manager', 'employee'].includes(role)) {
    return res.status(400).json({ message: '无效的角色' });
  }

  // 获取角色ID
  db.get('SELECT id FROM roles WHERE name = ?', [role], (err, roleData) => {
    if (err) {
      return res.status(500).json({ message: '获取角色失败', error: err.message });
    }

    if (!roleData) {
      return res.status(400).json({ message: '角色不存在' });
    }

    // 更新用户角色
    const sql = 'UPDATE users SET role_id = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?';
    db.run(sql, [roleData.id, id], function(err) {
      if (err) {
        return res.status(500).json({ message: '更新用户角色失败', error: err.message });
      }

      if (this.changes === 0) {
        return res.status(404).json({ message: '用户不存在' });
      }

      res.json({ message: '用户角色更新成功', userId: id, newRole: role });
    });
  });
});

// 更新用户信息
router.put('/:id', authenticateToken, (req, res) => {
  const { id } = req.params;
  const { fullName, email, password } = req.body;

  // 检查权限：管理员或用户本人
  if (req.user.role !== 'admin' && req.user.id !== parseInt(id)) {
    return res.status(403).json({ message: '没有访问权限' });
  }

  // 获取当前用户信息
  db.get('SELECT * FROM users WHERE id = ?', [id], (err, user) => {
    if (err) {
      return res.status(500).json({ message: '获取用户信息失败', error: err.message });
    }

    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }

    // 准备更新数据
    const updates = [];
    const params = [];

    if (fullName !== undefined) {
      updates.push('full_name = ?');
      params.push(fullName);
    }

    if (email !== undefined) {
      updates.push('email = ?');
      params.push(email);
    }

    if (password) {
      updates.push('password = ?');
      params.push(bcrypt.hashSync(password, 10));
    }

    if (updates.length === 0) {
      return res.status(400).json({ message: '没有提供要更新的信息' });
    }

    params.push(id);

    // 更新用户信息
    const sql = `UPDATE users SET ${updates.join(', ')}, updated_at = CURRENT_TIMESTAMP WHERE id = ?`;
    db.run(sql, params, function(err) {
      if (err) {
        return res.status(500).json({ message: '更新用户信息失败', error: err.message });
      }

      res.json({ message: '用户信息更新成功', userId: id });
    });
  });
});

// 删除用户 (仅管理员)
router.delete('/:id', authenticateToken, checkRole('admin'), (req, res) => {
  const { id } = req.params;

  // 防止删除管理员自己
  if (req.user.id === parseInt(id)) {
    return res.status(400).json({ message: '不能删除自己的账户' });
  }

  db.run('DELETE FROM users WHERE id = ?', [id], function(err) {
    if (err) {
      return res.status(500).json({ message: '删除用户失败', error: err.message });
    }

    if (this.changes === 0) {
      return res.status(404).json({ message: '用户不存在' });
    }

    res.json({ message: '用户删除成功', userId: id });
  });
});

module.exports = router;